package com.hsurosy.hsuchain.nft.user.domain.entity.convertor;

import org.mapstruct.NullValueCheckStrategy;
import org.mapstruct.factory.Mappers;

/**
 * 用户实体和用户信息转换器
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-05 18:58
 * @Description
 * @Version: v1.0.0
 */
@Mapper(nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
public interface UserConvertor {

    UserConvertor INSTANCE = Mappers.getMapper(UserConvertor.class);

    /**
     * 将 User 实体转换为 UserInfo VO（视图对象）
     *
     * @param request 用户实体
     * @return 用户视图对象
     */
    @Mapping(target = "userId", source = "request.id")
    UserInfo mapToVo(User request);

    /**
     * 将 UserInfo VO（视图对象）转换为 User 实体
     *
     * @param request 用户视图对象
     * @return 用户实体
     */
    @Mapping(target = "id", source = "request.userId")
    User mapToEntity(UserInfo request);

    /**
     * 将 List<User> 转换为 List<UserInfo>
     *
     * @param request 用户实体列表
     * @return 用户视图对象列表
     */
    @Mapping(target = "id", source = "request.userId")
    List<UserInfo> mapToVo(List<User> request);
}
